In many modern device controllers, two identical controller cards are used so that, if one card fails, the controller can continue to operate using the remaining “good” card.
Typically, in dual-card controller systems, each card is controlled by a microprocessor, and communicates with the other card, as well as with a host system and the device or devices to be controlled. Although the firmware on the two different controller cards will typically be at the same level, there is no guarantee that this will be the case, and all new versions of the firmware must support the communication protocol of the previous versions. This requirement to support the communication protocol of all previous levels of firmware places major restrictions on changes to the communication protocol. This is clearly disadvantageous in increasing the complexity of the task of upgrading the firmware code and in increasing the requirement for space in the controller card memory for storing the firmware code.
Today, on conventional dual-card controllers (typically, SCSI Enclosure Services, or SES cards) according to the art, there are three areas of erasable, programmable read-only memory, known as an EPROM (or “flash memory”) containing firmware:                1. The boot area (executed immediately after reset);        2. Image 1 (The main code image which is executed); and        3. Image 2 (Download area for the new main image)        
A download is typically performed as follows:                1. The host system sends packets of code data to a controller card, which burns them in Image 2 area of the flash memory as they are received;        2. The host then commands the controller card to ‘commit’ the code—this involves verifying that the Image 2 area has been downloaded correctly and has a valid checksum; and        3. Assuming step 2 is successful, the host system resets the controller card and the boot code will find that there is new code in Image 2 and so copy it over the code in Image 1 and execute it.        
The disadvantage of this conventional method is that there is no synchronization between the cards of the dual-card controller to ensure that both are updated at the same time. It would be advantageous to provide a technical means to avoid the situation in which different levels of firmware need to communicate with each other.